home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / parallel / philosph < prev    next >
Text File  |  1992-04-11  |  2KB  |  50 lines

  1. %---------------------------------------------------------------------
  2. %----Dining philosophers for Linda Prolog
  3. %----
  4. %----Written by Geoff Sutcliffe
  5. %---------------------------------------------------------------------
  6. dine(Number_of_philosophers,Number_of_eats):-
  7.     First_philosopher_number is Number_of_philosophers -1,
  8.     set_table_and_philosophers(First_philosopher_number,
  9. Number_of_philosophers,Number_of_eats).
  10. %---------------------------------------------------------------------
  11. %----Supply the room tickets, chopsticks and philosophers
  12. set_table_and_philosophers(0,Number_of_philosophers,Number_of_eats):-
  13.     !,
  14.     out(chopstick(0)),
  15.     eval(try_eat(0,Number_of_philosophers,Number_of_eats),philosophers).
  16.  
  17. set_table_and_philosophers(Philosopher_number,Number_of_philosophers,
  18. Number_of_eats):-
  19.     out(ticket),
  20.     out(chopstick(Philosopher_number)),
  21.     eval(try_eat(Philosopher_number,Number_of_philosophers,
  22. Number_of_eats),philosophers),
  23.     Next_philosopher_number is Philosopher_number - 1,
  24.     set_table_and_philosophers(Next_philosopher_number,
  25. Number_of_philosophers,Number_of_eats).
  26. %---------------------------------------------------------------------
  27. try_eat(Philosopher_number,_,0):-
  28.     send_request(write('Philosopher completed :')),
  29.     send_request(writeln(Philosopher_number)).
  30.  
  31. try_eat(Philosopher_number,Number_of_philosophers,Number_of_eats):-
  32.     in(ticket),
  33.     in(chopstick(Philosopher_number)),
  34.     Next_chopstick_number is (Philosopher_number + 1) mod 
  35. Number_of_philosophers,
  36.     in(chopstick(Next_chopstick_number)),
  37.     write('Philosopher '),
  38.     write(Philosopher_number),
  39.     writeln(' is eating'),
  40.     out(chopstick(Philosopher_number)),
  41.     out(chopstick(Next_chopstick_number)),
  42.     out(ticket),
  43.     write('Philosopher '),
  44.     write(Philosopher_number),
  45.     writeln(' is thinking'),
  46.     New_number_of_eats is Number_of_eats - 1,
  47.     try_eat(Philosopher_number,Number_of_philosophers,
  48. New_number_of_eats).
  49. %---------------------------------------------------------------------
  50.